Data storage devices have long been a major bottleneck in computer performance. Computer programs attempting to read from or write to a storage device frequently stall while waiting for a response from the storage device. This may result in an inefficient computing system with slow or unresponsive applications.
Many storage devices offer substantially better performance when data is accessed sequentially (i.e., accessing physically adjacent units of storage) rather than randomly (i.e., accessing units of storage with arbitrary relative positions). Defragmentation programs help to take advantage of this superior sequential-access performance by defragmenting files in a file system such that each file is stored sequentially on the storage device.
Unfortunately, given the relatively slow performance of storage devices, defragmentation processes may take an unacceptably long period of time to complete. Furthermore, file systems tend to fragment files over time, requiring periodic defragmentation in order to maintain optimal levels of performance.
In an attempt to address these problems, some defragmentation programs may reduce the time required to defragment a volume by allowing a user to select only certain files for defragmentation, as opposed to simply defragmenting all files present on the volume. However, this may require the user to invest a substantial amount of time selecting those files that should be defragmented, and may result in many files remaining fragmented.